package algo.A01_位运算;

import java.util.Random;

/**
 * 将整数的二进制位奇偶互换，输出互换后对应的十进制整数
 * 例如：9的二进制表示为1001，奇偶位互换后为0110，则输出6
 * 在与运算中，0为消除，1为保留
 */
public class T05_将整数的奇偶位互换 {
    public static void main(String[] args) {
        int N = new Random().nextInt(200);
        System.out.println(N + " → " + Integer.toString(N,2));
        solution(N);
    }

    private static void solution(int N){
        //保留奇数位
        int ji = (N & (0x55555555));//和0101 0101 0101 做与运算取出奇数位
        //保留偶数位
        int ou = (N & (0xaaaaaaaa));//和1010 1010 1010 做与运算取出偶数位
        //异或 同0异1 偶数位右移一位，奇数位左移一位，然后异或，实现互换效果
        int result = (ou >> 1) ^ (ji << 1);
        System.out.println(result + " → " + Integer.toString(result,2));
    }
}
